<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>Cap&iacute;tulo 6. Seguridad</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="Parte_3.html" title="Parte&nbsp;III.&nbsp;Complementos al desarrollo">
      <link rel="prev" href="ch05s03.html" title="5.3. ORM">
      <link rel="next" href="ch06s02.html" title="6.2. Modulos y Roles">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">Cap&iacute;tulo 6. Seguridad</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="ch05s03.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Parte&nbsp;III.&nbsp;Complementos al desarrollo</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s02.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="chapter" title="Cap&iacute;tulo 6. Seguridad">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title"><a name="d4e4479"></a>Cap&iacute;tulo 6. Seguridad
                  </h2>
               </div>
            </div>
         </div>
         <div class="toc">
            <p><b>Tabla de contenidos</b></p>
            <dl>
               <dt><span class="section"><a href="ch06.html#d4e4481">6.1. Autenticaci&oacute;n de usuarios</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch06.html#d4e4484">6.1.1. Introducci&oacute;n</a></span></dt>
                     <dt><span class="section"><a href="ch06.html#d4e4510">6.1.2. Elecci&oacute;n del m&eacute;todo de Autenticaci&oacute;n</a></span></dt>
                     <dt><span class="section"><a href="ch06.html#d4e4518">6.1.3. Crear un nuevo m&eacute;todo de Autenticaci&oacute;n</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch06s02.html">6.2. Modulos y Roles</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch06s02.html#d4e4540">6.2.1. Introducci&oacute;n</a></span></dt>
                     <dt><span class="section"><a href="ch06s02.html#d4e4610">6.2.2. Uso en el framework</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch06s03.html">6.3. Permisos</a></span></dt>
            </dl>
         </div>
           
         
           
         <div class="section" title="6.1. Autenticaci&oacute;n de usuarios">
            <div class="titlepage">
               <div>
                  <div>
                     <h2 class="title" style="clear: both"><a name="d4e4481"></a>6.1. Autenticaci&oacute;n de usuarios
                     </h2>
                  </div>
               </div>
            </div>
                
            
                
            <p></p>
            
                
            <div class="section" title="6.1.1. Introducci&oacute;n">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e4484"></a>6.1.1. Introducci&oacute;n
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>gvHIDRA proporciona varios mecanismos para autenticar los
                        usuarios, y tambi&eacute;n permite crear nuevos. Se usa el <a class="ulink" href="http://pear.php.net/manual/en/package.authentication.auth.php" target="_top">PEAR::Auth</a>,
                        por lo que en algunos puntos en conveniente ver su documentaci&oacute;n. Para
                        comprender el funcionamiento, conviene distinguir dos partes:
               </p>
               
                     
               <div class="orderedlist">
                  <ol class="orderedlist" type="1">
                     <li class="listitem">
                                  
                        <p>formulario para introducir las credenciales y comprobaci&oacute;n de
                                     su validez
                        </p>
                                
                     </li>
                     <li class="listitem">
                                  
                        <p>carga de la informaci&oacute;n relativa al usuario / aplicaci&oacute;n. Esta
                                     informaci&oacute;n se carga en la sesi&oacute;n, y su estructura puede verse en
                                     los ejemplos del m&eacute;todo postLogin en
                                     igep/include/valida/AuthBasic.php,
                                     igep/custom/cit.gva.es/auth/AuthWS.php y en <a class="ulink" href="http://zope.coput.gva.es/proyectos/igep/trabajo/igep/auth_gva.html" target="_top">Autenticaci&oacute;n
                                        imap gva</a>.
                        </p>
                                
                     </li>
                  </ol>
               </div>
               
                     
               <p>A continuaci&oacute;n veremos los mecanismos disponibles y como se tratan
                        estos puntos en cada uno de ellos.
               </p>
               
                     
               <div class="section" title="6.1.1.1. comun">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4495"></a>6.1.1.1. comun
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Es el m&eacute;todo usado por defecto en el tema 'cit.gva.es'. Aqu&iacute; el
                             formulario es externo, y en el framework solo se realiza la parte 2).
                             Esta parte se implementa en comun/modulos/valida.php. En el framework
                             se detecta por los par&aacute;metros en el GET pasados desde el formulario
                             externo.
                  </p>
                  
                          
                  <p>Al pulsar opci&oacute;n de salir se cierra la ventana del navegador (ya
                             que se asume que estamos en una ventana nueva).
                  </p>
                        
               </div>
               
                     
               <div class="section" title="6.1.1.2. gvPontis">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4499"></a>6.1.1.2. gvPontis
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Es el m&eacute;todo de ejemplo usado en el tema 'gvpontis'. Muestra un
                             formulario gen&eacute;rico para el paso 1. Los datos para la conexi&oacute;n son
                             usuario 'invitado' y contrase&ntilde;a '1'. En el paso 2 se carga la
                             informaci&oacute;n necesaria de forma est&aacute;tica.
                  </p>
                  
                          
                  <p>Para hacer uso de este m&eacute;todo hay que copiar el fichero
                             igep/include/valida/login.php a la ra&iacute;z del proyecto (se puede
                             renombrar), y acceder a &eacute;l con el navegador.
                  </p>
                  
                          
                  <p>Al pulsar la opci&oacute;n de salir se vuelve al formulario de
                             conexi&oacute;n.
                  </p>
                        
               </div>
               
                     
               <div class="section" title="6.1.1.3. wscmn (Web Service)">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4504"></a>6.1.1.3. wscmn (Web Service)
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Este m&eacute;todo es similar al de <span class="bold"><strong>comun</strong></span>, pero s&iacute; incluye formulario, y la
                             comprobaci&oacute;n se hace con el web service en wscmn. La parte 2) se
                             inicializa haciendo uso de la informaci&oacute;n recuperada por el web
                             service, por tanto no requiere acceso a base de datos.
                  </p>
                  
                          
                  <p>Para hacer uso de este m&eacute;todo hay que copiar el fichero
                             igep/custom/cit.gva.es/auth/login_ws.php a la ra&iacute;z del proyecto (se
                             puede renombrar), y acceder a &eacute;l con el navegador.
                  </p>
                  
                          
                  <p>Al pulsar la opci&oacute;n de salir se vuelve al formulario de
                             conexi&oacute;n.
                  </p>
                        
               </div>
                   
            </div>
            
                
            <div class="section" title="6.1.2. Elecci&oacute;n del m&eacute;todo de Autenticaci&oacute;n">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e4510"></a>6.1.2. Elecci&oacute;n del m&eacute;todo de Autenticaci&oacute;n
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>Cuando accedemos a la aplicaci&oacute;n sin indicar el fichero de inicio,
                        normalmente el servidor web ejecuta el fichero index.php., donde se
                        hacen una serie de comprobaciones para detectar el m&eacute;todo que se va a
                        usar. Hay dos formas de elecci&oacute;n:
               </p>
               
                     
               <div class="itemizedlist">
                  <ul class="itemizedlist" type="disc">
                     <li class="listitem">
                                  
                        <p>expl&iacute;cita: el tipo comun se activa con los par&aacute;metros pasados
                                     en el GET, y para los otros m&eacute;todos hay que acceder por http al
                                     fichero de login.
                        </p>
                                
                     </li>
                     <li class="listitem">
                                  
                        <p>impl&iacute;cita: si no hay elecci&oacute;n impl&iacute;cita, se buscan los
                                     ficheros 'login*.php' en la ra&iacute;z y se accede al primero, en orden
                                     alfab&eacute;tico.
                        </p>
                                
                     </li>
                  </ul>
               </div>
                   
            </div>
            
                
            <div class="section" title="6.1.3. Crear un nuevo m&eacute;todo de Autenticaci&oacute;n">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e4518"></a>6.1.3. Crear un nuevo m&eacute;todo de Autenticaci&oacute;n
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>A continuaci&oacute;n se explican los pasos para crear el nuevo m&eacute;todo.
                        Tambi&eacute;n podemos consultar la implementaci&oacute;n de los tipos gvPontis y
                        wscmn, ya que se han creado de esta forma. Tambi&eacute;n hay disponible un
                        <a class="ulink" href="http://zope.coput.gva.es/proyectos/igep/trabajo/igep/auth_gva.html" target="_top">ejemplo</a>
                        usando un servidor imap.
               </p>
               
                     
               <p>Excepto el fichero de indice (paso 1), los otros pueden situarse
                        en cualquier ubicaci&oacute;n, y normalmente vendr&aacute; determinado en funci&oacute;n de
                        donde necesitemos usarlos (aplicaci&oacute;n, custom o framework).
               </p>
               
                     
               <div class="section" title="6.1.3.1. Paso 1. Clase Principal">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4523"></a>6.1.3.1. Paso 1. Clase Principal
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>En primer lugar tenemos que crear el fichero php que contiene la
                             clase a usar con PEAR::Auth. Esta clase ha de heredar de
                             'igep/include/valida/gvhBaseAuth.php'. Los m&eacute;todos que debemos
                             implementar son:
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p>fetchData: recibe usuario y contrase&ntilde;a y comprueba su
                                          validez
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>autenticate: es el m&eacute;todo llamado desde el paso 1, y si se
                                          aceptan las credenciales, llamamos al m&eacute;todo open pas&aacute;ndole la URL
                                          de la clase que definimos en paso 2. Consultar los ejemplos para
                                          m&aacute;s detalles.
                           </p>
                                     
                        </li>
                     </ul>
                  </div>
                        
               </div>
               
                     
               <div class="section" title="6.1.3.2. Paso 2. <DESCRIPCION&gt;">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4531"></a>6.1.3.2. Paso 2. &lt;DESCRIPCION&gt;
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Creamos el fichero que invoca al m&eacute;todo autenticate anterior.
                             Este fichero siempre ha de ir en la raiz del proyecto, y es el punto
                             de entrada a la aplicaci&oacute;n usando el navegador.
                  </p>
                        
               </div>
               
                     
               <div class="section" title="6.1.3.3. Paso 3. <DESCRIPCION&gt;">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e4534"></a>6.1.3.3. Paso 3. &lt;DESCRIPCION&gt;
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Creamos la clase validacion, con el m&eacute;todo valida (llamado desde
                             el framework), que lo que hace es cargar la informaci&oacute;n necesaria en
                             la sesi&oacute;n. Podemos llamar al m&eacute;todo checkData (de la clase principal)
                             que comprueba si en la sesi&oacute;n est&aacute; toda la informaci&oacute;n que requiere
                             gvHIDRA.
                  </p>
                        
               </div>
                   
            </div>
              
         </div>
         
           
         
           
         
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="ch05s03.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="Parte_3.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="ch06s02.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">5.3. ORM&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;6.2. Modulos y Roles</td>
            </tr>
         </table>
      </div>
   </body>
</html>